
圖片來源:官方介紹
AWS CodeBuild 是無伺服器(Serverless)的持續整合(CI)服務,主要提供自動編譯程式碼、運行測試並生成可部署的文件,在整個 AWS CI/CD 流程中是最重要的,CodeBuild 優勢在於它的無伺服器特性,所以大幅降低維護的負擔,另外與 AWS 服務的整合也是另一個優勢。
CodeArtifacts 也是 AWS 的一項服務,可以用套件管理工具將不同環境需要的套件,打包成所需的最終成品放進去,軟體套件彼此的相依關係也會儲存
基本上 CodeBuild 的使用除了編譯、生成環境文件(如 Docker Image)、就是建立測試環境執行測試,但是如果是較單純的部署也是可以透過 CodeBuild 來實作,不需要使用 AWS 的 CodeDeploy
建置專案 (Build projects)
建置專案定義了 CodeBuild 如何執行構建。它包含有關源代碼位置、使用的構建環境、要運行的構建命令以及存儲構建輸出的位置等信息。
建置規格 (Buildspec)
Buildspec 是一個 YAML 文件,定義了 CodeBuild 執行建立時要運行的命令和相關設定。它通常位於源代碼存儲庫的根目錄,名為 buildspec.yml。
環境 (Environments)
CodeBuild 環境是執行 CodeBuild 當中程式的容器化環境。AWS 提供了多種設定環境種類,涵蓋常見的操作系統、編程語言和工具。您也可以創建自訂環境。
原始碼 (Source)
原始碼指定了構建的輸入位置。CodeBuild 支持多種源代碼提供商,包括 AWS CodeCommit、GitHub、Bitbucket 等。
【Day 20】Data Pipeline CI / CD - AWS CodeCommit
version: 0.2
env:
  variables:
    key: "value"
  secrets-manager:
    key: secret-id:json-key:version-stage:version-id
  git-credential-helper: no | yes
phases:
  install:
    run-as: Linux-user-name
    on-failure: ABORT | CONTINUE
    runtime-versions:
      runtime: version
    commands:
      - command
    finally:
      - command
  pre_build:
    run-as: Linux-user-name
    on-failure: ABORT | CONTINUE
    commands:
      - command
    finally:
      - command
  build:
    {... 如同 pre_build ...}
  post_build:
    {... 如同 pre_build ...}
artifacts:
  files:
    - ...
  name: ...
建立過程分為四個主要階段:install、pre_build、build 和 post_build。
四個階段習慣上會分成不同功能,如果想要用一個達成其實也可以:
每個階段的結構都相似,且都是可選的,架構細節如下:
version: 0.2
phases:
  install:
    runtime-versions:
      python: 3.9
    commands:
      - echo "Installing dependencies..."
      - pip install --upgrade pip
      - pip install -r requirements.txt
  pre_build:
    commands:
      - echo "Running static code analysis..."
      - flake8 .
  build:
    commands:
      - echo "Running unit tests..."
      - pytest tests/
      - echo "Building the application..."
      - python setup.py
  post_build:
    commands:
      - echo "Running integration tests..."
      - python -m pytest integration_tests/
artifacts:
  files:
    - '**/*'
  name: my-python-app-$(date +%Y-%m-%d)
install(安裝階段):指定 Python 3.9 為運行版本、更新 pip、安裝 requirements.txt 中的模組pre_build(預建立階段):使用 flake8 進行靜態代碼分析build(建立階段):pytest運行單元測試、建立應用程序post_build(建立後階段):pytest運行整合測試artifacts:'**/*' 表示包含所有文件和子目錄,name 是定義名稱,這裡使用動態名稱,包含app名稱和當前日期預設情況下,檔案名稱是
buildspec.yml,但在建立 CodeBuild 的時候也可以另外設定,所以也會依照不同的需求去設定名稱,例如:buildspec_debug.yml和buildspec_release.yml